大家好,我是卡米哥
本系列文中的每篇文章,都將會是從頭開始製作的聊天機器人。
卡米狗系列文 windows 安裝流程
相關文件參考
首先你要找到一個放專案的資料夾,然後開啟對應的小黑框,輸入以下指令:
rails new alarm_demo
然後進入專案:
cd alarm_demo
在 rails 中,可以透過修改 Gemfile 來安裝套件,也可以使用指令來幫我們修改 Gemfile,這次教怎麼用指令安裝套件。
bundle add line-bot-api
請在 app
資料夾下新增 services
資料夾,然後在 services
資料夾下新增 alarm_service.rb
檔案。
然後輸入以下程式碼:
require 'line/bot'
class AlarmService
def client
@client ||= Line::Bot::Client.new do |config|
config.channel_secret = '你的 line channel secret'
config.channel_token = '你的 line channel token'
end
end
def run
message = {
type: "text",
text: "現在時間:#{Time.current} 趕快起床吧"
}
client.push_message('你的 line user id', message)
end
end
如果你還沒有註冊 line bot,你可以到 line developer 後台 註冊一個,你可以在 line developer 後台找到以下資訊:
然後填入程式碼中。
在你的小黑框(需在專案資料夾下)輸入以下指令:
rails c
進入 rails console 後,輸入以下程式碼:
AlarmService.new.run
如果你看到的是以下回應,那麼你應該會在 line bot 那邊收到訊息了。
=> #<Net::HTTPOK 200 OK readbody=true>
如果你看到的是以下回應,那代表你的 line channel token 或者 line channel secret 打錯了。
#<Net::HTTPUnauthorized 401 Unauthorized readbody=true>
如果你發現你打錯了,在你修改程式碼之後,你可能會需要輸入 exit
離開後再重新 rails c
進入 rails console,否則你的修改可能無法正確載入。
如果你看到的是以下回應,那代表你的 line user id 或者 message 打錯了。
#<Net::HTTPBadRequest 400 Bad Request readbody=true>
請詳加檢查。
回到小黑框,輸入以下指令建立 rake task
rails g task line alarm
建立好了之後你會發現在你的專案資料夾下的 lib/tasks
下多了一個檔案 line.rake
,其內容如下:
namespace :line do
desc "TODO"
task alarm: :environment do
end
end
我們將他修改成這樣:
namespace :line do
task alarm: :environment do
AlarmService.new.run
end
end
其實這就是把我們剛剛寫好的程式填進去而已。
回到小黑框,輸入以下指令:
rails line:alarm
或者輸入
rake line:alarm
這就是 rake task,他的功能其實就是幫我們打開 rails c 之後再執行我們想要執行的程式。
有了 rake task 之後就能夠使用排程去觸發 line bot 了。
在發布之前,因為 Gemfile 沒有 sqlite3,所以我們需要調整一下 Gemfile,請將以下程式:
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
改為
# Use sqlite3 as the database for Active Record
group :development, :test do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
建立一個 heroku 新專案:
heroku create 你的專案名稱
其中,專案名稱只能用英文、數字和減號。好了之後上傳程式碼:
git add .
git commit -m "line alarm"
git push heroku master
上傳完成後使用以下指令來測試:
heroku run rails line:alarm
如果有收到來自 line bot 的訊息就表示成功了
在 Heroku 上要定期執行程式的話,需要安裝 addons,我們需要的 addons 叫做 scheduler,他是免費的,所以可以安心使用。
在專案資料夾下使用以下指令進行安裝:
heroku addons:create scheduler:standard
可以輸入以下指令查看說明文件(全英文):
heroku addons:docs scheduler
安裝好了之後我們需要設定排程,Heroku 其實有做讓我們設定排程的後台,輸入以下指令開啟後台。
heroku addons:open scheduler
你應該會看到下面這個畫面:
點擊Add new job
之後會看到這個畫面:
$ 號後面就是要填上我們想要執行的指令,其實就是我們做好的 rake task,這裡就填入:
rails line:alarm
然後先選擇每 10 分鐘觸發一次,就可以按下 Save
了。Save 之後,應該會看到以下畫面:
接著就是等 10 分鐘了。
以下開放許願,下一篇大家想看什麼內容?
卡米大請問一下如果我用我之前做的卡米狗的LINE BOT
要加上鬧鐘的功能是不是不能呢
以上是我用之前做出來的LINE BOT的帳號
他會出現403FORBIDDEN
請問一下該怎麼把鬧鐘功能加到卡米狗裡面呢?
還是只能分成兩個不同的帳號?
可以做在同一個專案也可以分開
卡米哥請問一下
如果用了Heroku Scheduler這個功能的話,伺服器是不是會一直醒著不會休息呀?
然後他要求要用Heroku Scheduler綁信用卡驗證,這樣用超過時數會不會被扣款啊?
即使有綁信用卡,還是可以繼續用0元方案,如果真的用完會倒站,不會扣款
好,謝謝卡米大
卡米哥想請問您,之前把功能都放在
class KamigoController < ApplicationController裡面,
但隨著功能越來越多之後,尤其 Line Messaging API 訊息格式都很長,
程式變得很雜亂,請問有甚麼方法可以將部分功能寫到別的檔案裏呢?
有的,之前本來想寫如何重構整理程式碼,但投票後大家比較想看更多的新功能
了解,那您之後有機會會寫,如何重構整理程式碼嗎?
會考慮的,不過最近比較忙
感恩卡米,讚嘆卡米
卡米大 想請問您可以做一篇教學在 heroku的資料庫之類的嗎
因為現在資料庫被聊天內容塞爆了 所以不能用 我想把他清掉或轉移 但不知道怎麼用
最近比較忙喔 比較沒空無法寫文
請參考這篇文章:https://devcenter.heroku.com/articles/updating-heroku-postgres-databases
請問卡米哥,如果要做使用者以固定格式說出時間,機器人根據時間做鬧鐘提醒,這篇文章的heroku排程可以做到嗎,如果不行
研究這兩個網站能做到嗎,還是免費版只能在後台提早設定時間去跑主動訊息
如果要做使用者以固定格式說出時間,機器人根據時間做鬧鐘提醒,這篇文章的heroku排程可以做到嗎?
研究這兩個網站能做到嗎?
也可以做到,這跟上面那個方法不是同一個作法。
了解感恩
求米大大教學一個固定選單能讓使用者點選圖示,並回傳資料的功能~拜託惹超想學的
請問你說的是像跟這隻聊天機器人說「目錄」之後看到的東西嗎?
對喔~沒錯~~~~就是這個
關於這個部分 這個是使用 flex message 製作的。
上面的那隻是我使用 kamigo聊天機器人框架 所製作而成的聊天機器人,這隻聊天機器人也是開放原始碼,你可以參考這段生成 flex message 的程式
如果有問題可以在此留言,我有空就會回來回留言